package Metier.Tuples;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import DAO.TupleDAO.TupleDAO;
import Factory.Factory;

public class Tuples {

	private List<Tuple> listeTuple;
	private List<String> listeTitre;
	private String nomTable;
	private TupleDAO dao;

	public Tuples(String table)
	{
		dao = Factory.getTupleDAO();
		this.nomTable = table;
		this.listeTuple = new ArrayList<Tuple>();
		this.listeTitre = new ArrayList<String>();
	}

	public void setTitre(List<String> listeTitre) {
		this.listeTitre = listeTitre;
	}

	public String[] getTitres() {
		String[] titres = new String[this.listeTitre.size()];
		for(int i=0;i<this.listeTitre.size();i++)
		{
			titres[i] = this.listeTitre.get(i);
		}
		return titres;
	}

	public void add(Tuple tuple) {
		this.listeTuple.add(tuple);
	}

	public Object[][] getDonnee() {
		Object[][] donnee =	new String[this.listeTuple.size()][this.listeTitre.size()];
		for(int i=0;i<this.listeTuple.size();i++)
		{
			Object[] tuple = this.listeTuple.get(i).getDonnee();
			for(int j=0;j<tuple.length;j++)
			{
				donnee[i][j] = tuple[j];
			}
		}
		return donnee;
	}

	public void ajouterTuple() {
		this.listeTuple.add(new Tuple(this.listeTitre.size()));
	}

	public void deleteTuple(int index) throws SQLException {
		if(this.dao.delete(this.nomTable,this.listeTitre,this.listeTuple.get(index)))
			this.listeTuple.remove(index);
	}

	public void sauvegarderTuple(int index, List<String> listeValeurs) throws SQLException {
		if (this.listeTuple.get(index).vide())
		{
			this.listeTuple.get(index).set(listeValeurs);
			this.dao.create(this.nomTable,this.listeTuple.get(index));
		}
		else
		{
			Tuple tuple = new Tuple(this.listeTuple.get(index));
			this.listeTuple.get(index).set(listeValeurs);
			boolean etat = false;
			try {
				this.dao.modifier(this.nomTable,this.listeTitre,this.listeTuple.get(index),tuple);
			} catch (Exception e) {
				this.listeTuple.get(index).set(tuple);
				etat=true;

				throw new SQLException(e);
			}
			
		}

	}

	public int getTitresSize() {
		return this.listeTitre.size();
	}
}
